package sde.actor.csm;
import java.util.*;
import sde.actor.*;

public class Router extends Stazione{
	
	//Router = stazione ad hoc
	private Stazione []prossimaStazione;
	private double []q;
	private Random g;
	
	public Router( Stazione []prossimaStazione,
			       double []q,
			       Random g ){
		if( prossimaStazione.length!= q.length )
			throw new IllegalArgumentException("Router mal configurato");
		double sommaProbabilita=0;
		for( double p: q ) sommaProbabilita+=p;
		if( !(Math.abs(sommaProbabilita-1D)<=1.0E-14) )
			throw new IllegalArgumentException("Router somma probabilita' non unitaria");
		this.prossimaStazione = Arrays.copyOf(prossimaStazione, prossimaStazione.length );
		this.q = q;
		this.g = g;
	}

	@Override
	public void handler( Message m ){
		if( m instanceof Arrival ){
			double u=g.nextDouble();
			double tacca=0;
			int i=0;
			for( ; i<q.length; i++ )
				if( u>=tacca && u<tacca+q[i] ) break;
				else tacca=tacca+q[i];	
			//instrada m alla prossimaStazione di indice i
			prossimaStazione[i].send( m );
		}
	}//handler
	
}//Router

